package com.moli.iov.base.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.moli.iov.base.model.dto.req.VehicleBaseReqDto;
import com.moli.iov.base.model.dto.req.VehicleFenceBindingReqDto;
import com.moli.iov.base.model.po.VehicleBase;
import com.moli.iov.rest.RestResponse;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author wanghualin
 * @since 2019-09-02
 */
public interface IVehicleBaseService extends IService<VehicleBase> {

  /**
   * 添加车辆
   *
   * @param vehicleBaseReqDto
   * @return
   */
  public RestResponse saveVehicleBase(VehicleBaseReqDto vehicleBaseReqDto);

  /**
   * 车辆是否存在
   * @param vin 车架号
   * @return
   */
  public VehicleBase getVehicleBaseByVin(String vin);

  /**
   * 修改车辆
   * @param vehicleBaseReqDto
   * @return
   */
  public RestResponse updateVehicleBase(VehicleBaseReqDto vehicleBaseReqDto);

  /**
   * 得到所有已授权车辆
   * @return
   */
   public List<VehicleBase> listVehicleBase();

  /**
   *
   * 得到所有已授权车辆 比listVehicleBase方法少遍历一次
   *
   */
  public Map<String,String > listVehicleBaseMaps();
  /**
   * 根据公司id来VehicleBase 不走缓存
   *
   * @param companyId
   * @return
   */
   public  List<VehicleBase> listVehicleBaseByCompanyId(Long companyId);

  /**
   * 批量查询vin
   * @param vinList
   * @return
   */
  public List<VehicleBase> lisVehicleBaseByVin(List<String> vinList);

  /**
   * 得到不包含vinlist的公司的 VehicleBase
   *
   * @param companyId
   * @param vinList
   * @return
   */
  public  List<VehicleBase>listVehicleBaseNotInVinByCompanyId(Long companyId,List<String> vinList);

  /**
   * 初始化
   */
  public   void  initVehicleBase();

  /**
   *  根据车牌号
   *
   * @return
   * @param license
   */
  VehicleBase queryVinByLicense(String license);

  /**
   * 返回所有车辆的vin集合
   *
   * @return
   * @param companyId
   */
  RestResponse<List<String>> listVinByCompanyId(Long companyId);

  /**
   * 绑定查询
   * @param dto
   * @return
   */
  List<VehicleBase> listVehicleFenceBindingList(VehicleFenceBindingReqDto dto);

  /**
   * 查询公司车辆  不走缓存
   * @param companyId
   * @param listVin
   * @return
   */
  List<VehicleBase> listVehicleBaseInVinByCompanyId(Long companyId, List<String> listVin);

  /**
   * 解绑查询
   * @param dto
   * @return
   */
  List<VehicleBase> listVehicleFenceUnBindingList(VehicleFenceBindingReqDto dto);
  /**
   * 车辆是否存在 查找未授权的
   * @param vin 车架号
   * @return
   */
  public VehicleBase getVehicleBaseUnauthorizedByVin(String vin);
}
